package com.donger.common.core.annotation;


import com.donger.common.core.validator.customrule.ContainValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 *  Contain
 *  这是自定义的validator校验器。用来检查字符串是否包含某个字符串的，
 *  针对不同情况，可以对返回值进行取反操作，实现不包含效果
 *  校验器实现参考{@link ContainValidator}
 *  <h2>使用示例</h2>
 *  <pre>
 *      在使用字段上，添加如下注解，即可校验当前字符串包含规则
 *   &#064;Contain(include = "-", convert = true, message = "部门名称不允许含有字符 '-' ")
 *   &#064;Contain(include = "-", message = "部门名称需要含有字符 '-' ")
 *   &#064;Contain(include = ",", convert = true, message = "部门名称不允许含有字符 ',' ")
 *  </pre>
 *
 *
 * @author xyx
 * @date 2020-03-13 16:42
 */
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Contain.List.class)
@Constraint(
        validatedBy = {ContainValidator.class}
)
public @interface Contain {

    /**
     * 字符串是否包含改字符串
     *
     * @return  需要匹配的字符串
     */
    String include();

    /**
     * 对结果值是否取反
     *
     * @return true 结果值取反  false结果值不取反
     */
    boolean convert() default false;

    String message() default "规则校验失败";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
    @Retention(RetentionPolicy.RUNTIME)
    @interface List {
        Contain[] value();
    }

}